package main

import "fmt"

func main() {
	// fmt.Println(isValid("(])"))
	// fmt.Println(isValid("[])"))
		fmt.Println(isValid("([{[]{}}])"))

}

// 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
// 有效字符串需满足：
// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
// 每个右括号都有一个对应的相同类型的左括号。
func isValid(s string) bool {
	stack := []byte{}
	for i := 0; i < len(s); i++ {
		stack = append(stack, s[i])
		if len(stack) > 1 {
			// 及比较是否需要出栈
			c := stack[len(stack)-2]
			if (c == byte('(') && s[i] == byte(')')) ||
				(c == byte('{') && s[i] == byte('}')) || (c == byte('[') && s[i] == byte(']')) {
				stack = stack[:len(stack)-2]
			}
		}
	}

	return len(stack) == 0
}
